package com.eupmt.lab3.persistence.ibatis.dao;

import com.eupmt.lab3.domain.TipusReparacio;
import com.eupmt.lab3.exceptions.TipusReparacioJaExisteixException;
import com.eupmt.lab3.exceptions.TipusReparacioNoExisteixException;
import com.eupmt.lab3.persistence.ibatis.PersistenceManager;
import com.eupmt.lab3.persistence.ibatis.dao.ibator.IbatorTipusReparacioDAOImpl;
import static com.eupmt.lab3.utils.Constants.*;
import com.eupmt.lab3.utils.Log;
import com.ibatis.sqlmap.client.SqlMapClient;
import java.sql.SQLException;

/**
 *
 * @author Edu Sirvent
 */
public class TipusReparacioDAOImpl extends IbatorTipusReparacioDAOImpl implements TipusReparacioDAO{

    private SqlMapClient sqlMapClient;
    private Log log = null;

    public TipusReparacioDAOImpl() {
        super();
        sqlMapClient = PersistenceManager.getInstance().getSqlMapClient();
        log = new Log();
    }

    //Mètodes
    public TipusReparacio  getTipusReparacioById(Integer id) throws Exception {
        TipusReparacio tipus = new TipusReparacio();
        tipus.setIdreparacio(id);
        TipusReparacio tipusPersistent = null;
        try {
            tipusPersistent = (TipusReparacio)sqlMapClient.queryForObject("tipusreparacio.getTipusReparacioById", tipus);
            if (tipusPersistent==null){
                throw new TipusReparacioNoExisteixException();
            }
        }
        catch (SQLException sqle) {
            if (sqle.getErrorCode() == TIPUSREPARACIO_NO_EXISTEIX) {
                throw new TipusReparacioNoExisteixException(sqle.getMessage());
            }
        }
        return tipusPersistent;
    }

    public void insertTipusReparacio(TipusReparacio tipus) throws Exception {

        try {
            sqlMapClient.insert("tipusreparacio.insert",tipus);
        }
        catch (SQLException sqle) {
            if (sqle.getErrorCode() == TIPUSREPARACIO_JA_EXISTEIX) {
                throw new TipusReparacioJaExisteixException(sqle.getMessage());
            }
        }
    }

    public void updateTipusReparacio(TipusReparacio tipus) throws Exception {
        try {
            log.infoLog("Es fa update");
            
           sqlMapClient.update("tipusreparacio.update", tipus);
        }
        catch (SQLException sqle) {
            log.infoLog("SQLErrorCode:"+sqle.getErrorCode()+":");
            
                throw new TipusReparacioNoExisteixException(sqle.getMessage());
           
        }
        catch (Exception e ){
            log.infoLog("altra excepcció");
        }
    }

    public void deleteTipusReparacio(TipusReparacio tipus) throws Exception {
        try{
            sqlMapClient.delete("tipusreparacio.delete", tipus);
        }catch (SQLException sqle){
            if (sqle.getErrorCode()==TIPUSREPARACIO_NO_EXISTEIX){
                throw new TipusReparacioNoExisteixException(sqle.getMessage());

            }
            log.infoLog("delete tipus reparacio SQLErrorCode: "+sqle.getErrorCode()+" :");
        }
        
    }

    public void saveTipusReparacio(TipusReparacio tipus) throws Exception {
        log.infoLog("TipusReparacio a fer save "+ tipus.getIdreparacio());

        if (tipus.getIdreparacio()==UNDEFINED){
            insertTipusReparacio(tipus);
        }else{
            this.updateTipusReparacio(tipus);
        }

    }

}
